when-after(e;info;pred?;init;Trans;val)
== if first(e) <x.init(loc(e),x),Trans(loc(e),kind(e),val(e),x.init(loc(e),x))>
== else let p = when-after(pred(e);info;pred?;init;Trans;val) in
== else <2of(p),Trans(loc(e),kind(e),val(e),2of(p))> fi
(recursive)
when-after(e;info;pred?;init;Trans;val)
== if first(pred?;e)
== if <x.init(loc(info;e),x),Trans(loc(info;e),kind(info;e),val(e),x.init(loc(info;e),x))>
== else let p = when-after(pred(pred?;e);info;pred?;init;Trans;val) in
== else <2of(p),Trans(loc(info;e),kind(info;e),val(e),2of(p))> fi
(recursive)